01. 基本入門&開發工具有使用到 go mod init
這個章節會介紹什麼是模組。我記得 約在 Go 1.15 就將此功能納入為正式工具且預設是啟用,非常建議新專案都使用此功能,方便管理該專案下的套件。
初始專案,成功的話會在當前目錄產生 go.mod
檔案
go mod init [module]
go.mod
檔案內容,會紀錄這個專案名稱及使用的 Go 版本,如果會將專案放置 GitHub 通常會依照以下的命名習慣(另外如果不使用指令,也可以手動建立 go.mod
module github.com/[user_name]/[project_name]
go 1.20
一個 module 可以有多個 package,以 folder 為單位分成不同的 package,該 folder 的名稱就會是。概念上像是其他程式語言 namespace 的功能。
下載套件
go get [module]
範例:package scope
folder
|_ custom
|_ math.go
|_ main.go
custom\math.go
package custom
// 只要 import custom 就可以使用
func Add(a, b int) int {
return a + b
}
// 只有 package custom 範圍下可以使用
func addOne(a int) int {
return a + 1
}
main.go
package main
// 引入自訂套件
import (
// "[module]/custom"
// 如果與其他套件撞名,可以另外取別名
cs "[module]/custom"
// 如果引入套件但是只需用到該套件 init() 可以使用忽略變數
// _ "[module]/custom"
)
func main() {
// custom.Add(1, 2)
cs.Add(1, 2)
}
內部套件
folder
|_ custom
|_ math.go
|_ internal
|_ util.go
|_ main.go
internal 是有特殊意義的資料夾,只能於這個專案內使用的套件,也就是說如果其他開發者使用 go get
這個模組時,也無法 import 到裡面提供的功能。
所以當一些內部實作不直接開放給其他開發者使用時,可以放在 internal 資料夾裡面。
Go 本身並沒有規定專案架構,這部分給開發者很大的自由,可以依據團隊的規範或個人的習慣來做調整。
如果沒有想法的,這裡有一些範例可以參考 GitHub Repo: Standard Go Project Layout